#define max(a, b) (((a) > (b)) ? (a) : (b))

bool canJump(int* nums, int numsSize) {
    // step 1# 初始化可达范围cover为0（起点）
    int cover = 0;

    // step 2# 遍历所有在可达范围内的位置
    for(int i = 0; i <= cover; ++i) {
        // step 2.1# 更新当前能达到的最远位置
        cover = max(i + nums[i], cover);

        // step 2.2# 如果已经可以跳到或超过最后一个位置，说明可以完成跳跃
        if(cover >= numsSize - 1)
            return true;
    }

    // step 3# 如果循环结束都没能跳到最后，说明无法完成跳跃
    return false;
}
